import pandas as pd
import dash
from dash import dcc , html
from dash.dependencies import Input, Output
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
import plotly.offline as py
pio.renderers.default = 'notebook'

Research and Development#

Research and development (R&D) are crucial for driving innovation, creating high-quality jobs, and building a sustainable, low-carbon economy. Recognizing this, the provincial government has developed the StrongerBC plan, which sets out a vision for strengthening R&D in B.C.

df1 = pd.read_csv("~/strongerbc/data/research_and_development_1.csv")
df = df1[df1['Year'] >= 2000]
px.scatter(df1, x= 'Year', y = 'VALUE')
df1 = pd.read_csv("~/strongerbc/data/research_and_development_1.csv")
df = df1[df1['Year'] >= 2000]
px.line(df1, x= 'Year', y = 'VALUE')
# %run app1.py
import pandas as pd
import ipywidgets as widgets

from bqplot import Lines, Figure, LinearScale, DateScale, Axis
import plotly.io as pio
import plotly.offline as py
pio.renderers.default = 'notebook'

df1 = pd.read_csv("~/strongerbc/data/research_and_development_1.csv")
df = df1[df1['Year'] >= 2000]

# Labels and Steps of Year Range
labels = {str(year): str(year) for year in range(df['Year'].min(), df['Year'].max() + 1 , 5)}
steps = {str(year): '' for year in range(df['Year'].min(), df['Year'].max() + 1)}
marks = {**steps, **labels}

# Create widgets
year_slider = widgets.IntRangeSlider(
    value=[df['Year'].min(), df['Year'].max()],
    min=df['Year'].min(),
    max=df['Year'].max(),
    step=1,
    description='Year:',
    continuous_update=False
)

geo_dropdown = widgets.Dropdown(
    options=df['GEO'].unique().tolist(),
    value=df['GEO'].unique()[0],
    description='GEO:'
)

Funder_dropdown = widgets.Dropdown(
    options=df['Funder'].unique().tolist(),
    value=df['Funder'].unique()[0],
    description='Funder:'
)

Performer_dropdown = widgets.Dropdown(
    options=df['Performer'].unique().tolist(),
    value=df['Performer'].unique()[0],
    description='Performer:'
)

ScienceType_dropdown = widgets.Dropdown(
    options=df['Science type'].unique().tolist(),
    value=df['Science type'].unique()[0],
    description='Science type:'
)

Prices_dropdown = widgets.Dropdown(
    options=df['Prices'].unique().tolist(),
    value=df['Prices'].unique()[0],
    description='Prices:'
)

# Create bqplot figure
x_sc = DateScale()
y_sc = LinearScale()

lines = Lines(x=[], y=[], scales={'x': x_sc, 'y': y_sc})

ax_x = Axis(label='Year', scale=x_sc)
ax_y = Axis(label='Value (in millions $)', scale=y_sc, orientation='vertical')

fig = Figure(marks=[lines], axes=[ax_x, ax_y], title='Investment in Innovation')

# Update function
def update_graph(*args):
    year_range = year_slider.value
    geo_value = geo_dropdown.value
    Funder_value = Funder_dropdown.value
    Performer_value = Performer_dropdown.value
    ScienceType_value = ScienceType_dropdown.value
    Prices_value = Prices_dropdown.value

    dff = df[(df['Year'] >= year_range[0]) & 
             (df['Year'] <= year_range[1]) & 
             (df['GEO'] == geo_value)      & 
             (df['Funder'] == Funder_value)&
             (df['Performer'] == Performer_value) &
             (df['Science type'] == ScienceType_value) &
             (df['Prices'] == Prices_value)]

    lines.x = dff['Year']
    lines.y = dff['VALUE']

# Observe changes
year_slider.observe(update_graph, 'value')
geo_dropdown.observe(update_graph, 'value')
Funder_dropdown.observe(update_graph, 'value')
Performer_dropdown.observe(update_graph, 'value')
ScienceType_dropdown.observe(update_graph, 'value')
Prices_dropdown.observe(update_graph, 'value')

# Display widgets
display(year_slider, geo_dropdown, Funder_dropdown, Performer_dropdown, ScienceType_dropdown, Prices_dropdown, fig)

# Initial plot
update_graph()